package me.fengzhuan.demo;

import java.util.Scanner;

public class StudentTest {
    public static void main(String[] args) {
        Student[] arr = new Student[3];
        Student st1 = new Student(1, "zhangsan", 23);
        Student st2 = new Student(2, "lisi", 24);
        Student st3 = new Student(3, "wangwu", 25);
        arr[0] = st1;
        arr[1] = st2;
        arr[2] = st3;
        //要求1：再次添加一个学生对象，并在添加的时候进行学号唯一性判断
        Student st4 = new Student(4, "zhaoliu", 26);

//唯一性判断
        //已存在--不用添加
        //不存在--就可以把学生对象添加进数组
        boolean flag = contains(arr, st4.getId());
        if (flag) {
            //已存在--不用添加
            System.out.println("该学号已存在");
        } else {
            int count = getCount(arr);
            if (count == arr.length) {
                //已经存满
                //创建一个新数组，长度 = 老数组的长度 + 1
                //然后把老数组的元素拷贝到新数组中
                Student[] newArr = creatNewArr(arr);
                //把st4添加进去
                newArr[count] = st4;
                printArr(newArr);
            } else {
                //没有存满
                //直接添加
                arr[count] = st4;
                //要求2：添加完毕后，遍历所有学生信息
                printArr(arr);
            }
        }
    //要求3：通过id删除学生信息
        int index=getIndex(arr,2);
       if(index>=0){
            //如果存在,则删除
            //把index索引对应的元素赋值为null
           arr[index]=null;
            //要求4：删除完毕之后,遍历所有学生信息
           System.out.println("==============");
           printArr(arr);
        }
        else{
            //如果不存在,则提示
            System.out.println("该id不存在,删除失败");
        }
        if(index==0){
            int newAge=arr[index].getAge()+1;
            arr[index].setAge(newAge);
        }
        else{
            System.out.println("该id不存在,修改失败");
            printArr(arr);
        }
    }

    //要求2：添加完毕后，遍历所有学生信息
    public static void printArr(Student[] arr) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != null) {
                System.out.println(arr[i].getId() + " " + arr[i].getName() + " " + arr[i].getAge());
            }
        }
    }



    //创建一个新数组，长度 = 老数组的长度 + 1
    //然后把老数组的元素拷贝到新数组中
    public static Student[] creatNewArr(Student[] arr) {
        Student[] newArr = new Student[arr.length + 1];
        //循环遍历得到老数组中的每一个元素
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }

    //定义一个方法判断数组中已经存了几个元素
    public static int getCount(Student[] arr) {
        //定义一个计数器用来统计
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != null) {
                count++;
            }
        }
        return count;
    }

    //定义一个方法进行学号唯一性的判断
    public static boolean contains(Student[] arr, int id) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != null) {
                if (arr[i].getId() == id) {
                    return true;
                }
            }
        }
        //当循环结束之后，还没有找到一样的，那么就表示数组中要查找的id是不存在的
        return false;
    }

    //找到id在数组中的索引
    public static int getIndex(Student[] arr, int id) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != null) {
                if (arr[i].getId() == id) {
                    return i;
                }
            }
        }
        return -1;
    }
}
